<?php
/**
 * 
 * @author lfYang
 * 主要是提供从客户端过来的数据的一个方便的访问接口
 *
 */
class Request {
	
	/**
	 * isPost
	 * 判断请求是不是一个Post请求
	 *
	 * @return bool
	 */
	public function isPost() {
		return isset ( $_SERVER ['REQUEST_METHOD'] ) && strtoupper ( $_SERVER ['REQUEST_METHOD'] ) === 'POST';
	}
	
	/**
	 * isGet
	 * 判断请求是不是一个Get请求
	 *
	 * @return bool
	 */
	public function isGet() {
		return isset ( $_SERVER ['REQUEST_METHOD'] ) && strtoupper ( $_SERVER ['REQUEST_METHOD'] ) === 'GET';
	}
	
	/**
	 * isAjax
	 * 判断是否是Ajax请求
	 *
	 * @return bool
	 */
	public function isAjax() {
		if (isset ( $_SERVER ['HTTP_X_REQUESTED_WITH'] )) {
			if ('XMLHTTPREQUEST' === strtoupper ( $_SERVER ['HTTP_X_REQUESTED_WITH'] )) {
				return true;
			}
		}
		if (isset ( $_GET ['ajax'] ) && $_GET ['ajax'] == '1') {
			return true;
		}
		return false;
	}
	
	/**
	 * <h2>检查用户设备是否是移动设备</h2>
	 *
	 * @return bool
	 */
	public function isMobile() {
		require_once ROOT_PATH . 'lib/Mobile/Mobile_Detect.php';
		$detect = new Mobile_Detect ();
		return $detect->isMobile ();
	}
	
	/**
	 * <h2>获取用户代理的类型</h2>
	 *
	 * <p>如果用户代理是手机，则返回<strong>phone</strong>，
	 * 如果是平板电脑，返回<strong>tablet</strong>，
	 * 如果是电脑，则返回<strong>computer</strong>
	 * </p>
	 *
	 * @return string
	 */
	public function getAgentType() {
		require_once ROOT_PATH . 'lib/Mobile/Mobile_Detect.php';
		$detect = new Mobile_Detect ();
		$deviceType = ($detect->isMobile () ? ($detect->isTablet () ? 'tablet' : 'phone') : 'computer');
		return $deviceType;
	}
	
	/**
	 * 从_POST里头获取一个参数，如果没有返回null
	 *
	 * @param string $name
	 *        	_POST数组的数组下标
	 * @return string
	 */
	public function getPost($name) {
		return isset ( $_POST [$name] ) ? $_POST [$name] : null;
	}
	
	/**
	 * 从_GET里头获取一个参数，如果没有返回null
	 *
	 * @param string $name
	 *        	_GET数组的数组下标
	 * @return string
	 */
	public function getGet($name) {
		return isset ( $_GET [$name] ) ? $_GET [$name] : null;
	}
	
	/**
	 * 从_COOKIE中获取一个参数，如果该参数不存在，返回null
	 *
	 * @param string $name
	 *        	_COOKIE数组的下标
	 * @return string
	 */
	public function getCookie($name) {
		return isset ( $_COOKIE [$name] ) ? $_COOKIE [$name] : null;
	}
	
	/**
	 * 从_REQUEST数组中获取一个参数
	 * _REQUEST数组包含了_POST，_GET，_COOKIE，如果不存在，返回null
	 *
	 * @param string $name
	 *        	_REQUEST数组的下标
	 * @return string
	 */
	public function getRequest($name) {
		return isset ( $_REQUEST [$name] ) ? $_REQUEST [$name] : null;
	}
	
	/**
	 * 获取_SERVER超级变量里头的值
	 *
	 * @param string $name
	 *        	_SERVER 数组的下标
	 * @return string
	 */
	public function getServer($name) {
		return isset ( $_SERVER [$name] ) ? $_SERVER [$name] : null;
	}
	
	/**
	 * 获取请求的来源页面
	 *
	 * @return string
	 */
	public function getReferer() {
		$referer = $this->getRequest ( REFERER );
		if (empty ( $referer )) {
			$referer = $this->getServer ( 'HTTP_REFERER' );
		}
		if (empty ( $referer )) {
			$referer = $_SERVER ['HTTP_HOST'] . $this->getServer ( 'REQUEST_URI' );
		}
		return $referer;
	}
}
